package vista;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JPanel;

import modelo.Jugador;

/**
 * Representa los datos del jugador.
 * <p>Los datos representados son:
 * <ul>
 * <li>Nombre</li>
 * <li>Tiempo</li>
 * </ul>
 *
 */
public abstract class VistaJugador extends JPanel implements Observer{

	/**
	 * Ancho del componente.
	 */
	protected static int ANCHO = 250;
	
	/**
	 * Altura del componente.
	 */
	protected static int ALTURA = 70;
	
	/**
	 * Espacio en p�xeles entre l�neas del texto.
	 */
	protected static final int ESPACIO_LINEAS = 20;
	
	/**
	 * Fuente usada para el nombre del jugador.
	 */
	protected static Font fuenteTitulo = new Font("SansSerif", Font.BOLD, 16);
	
	/**
	 * Fuente usada para los datos del jugador.
	 */
	protected static Font fuenteTexto = new Font("SansSerif", Font.PLAIN, 11);
	
	/**
	 * Posici�n del componente sobre el eje x.
	 */
	protected int posicionX = 0;
	
	/**
	 * Posici�n del componente sobre el eje y.
	 */
	protected int posicionY = 0;
	
	/**
	 * Buffer interno usado para dibujar.
	 */
	protected BufferedImage buffer = null;
	
	/**
	 * Jugador cuyos datos representa la instancia de {@code VistaJugador}.
	 */
	protected Jugador jugador;
	
	/**
	 * Puntaje del jugador.
	 */
	protected String tiempo;
	
	/**
	 * Se crea una vista jugador que representa los datos 
	 * del jugador humano recibido como par�metro.
	 * 
	 * @param jugador jugador humano cuyos datos representa la vista
	 */
	public VistaJugador(Jugador jugador) {
		this.jugador = jugador;
		this.jugador.addObserver(this);
		buffer = new BufferedImage(getWidth(), getHeight(), BufferedImage.TRANSLUCENT);
		inicializarTextos();
	}

	/**
	 * Inicializa los componentes de la vista.
	 */
	protected abstract void inicializarComponentes();
	
	/**
	 * Inicializa los textos a mostrar.
	 */
	protected void inicializarTextos() {
//		tiempo = "Tiempo: " + Integer.toString(jugador.getMejorTiempo());
	}
	
	/**
	 * Actualiza la vista del jugador.
	 */
	@Override
	public void update(Observable o, Object arg) {
		inicializarTextos();
		inicializarComponentes();
		repaint();
	}
	
	/**
	 * Setea la posici�n del componente.
	 * @param x posici�n del componente sobre el eje x
	 * @param y posici�n del componente sobre el eje y
	 */
	public void setPosicion(int x, int y) {
		this.posicionX = x;
		this.posicionY = y;
	}
	
	/**
	 * Devuelve el ancho en p�xeles del componente.
	 * @return ancho en p�xeles del componente
	 */
	public int getWidth() {
		return ANCHO;
	}
	
	/**
	 * Devuelve la altura en p�xeles del componente.
	 * @return altura en p�xeles del componente
	 */
	public int getHeight() {
		return ALTURA;
	}
	
	@Override
	public void paint(Graphics g) {
		super.paint(g);
	}
	
	@Override
	public Dimension getPreferredSize(){
		return new Dimension(ANCHO, ALTURA);
	}
 }